home *** CD-ROM | disk | FTP | other *** search
- /************************************************************
- "meter.c"
-
- by: Walt Davis [MacTutor, September 1991]
-
- converted to "C" by: John A. Love, III
- using Symantec's "THINK C", v 5.00
- ************************************************************/
-
-
- #include <Palettes.h>
-
- #include "protos"
-
- #include "globals.h"
- #include "extern.h"
-
-
-
-
- WindowPtr MeterWindowInit (void) {
-
- Rect meterWindRect = {0, 0, 60, 280};
- WindowPtr meterWindow;
-
-
- meterWindow = NewWindow(nil,
- &meterWindRect,
- "",
- false,
- dBoxProc,
- (WindowPtr)-1,
- false,
- 0L);
- SetPort(meterWindow);
-
- CenterWindow(meterWindow);
- ShowWindow(meterWindow);
-
- return (meterWindow);
-
- } /* MeterWindowInit */
-
-
- void MeterWindowDraw (WindowPtr meterWindow, Str255 mTitle) {
-
- /* Where the 5% and 10% graduation marks are
- ** placed given a rect 250 pixels wide: */
- short fiveSize = 2, fiveStep = 12;
- short tenSize = 4, tenStep = 25;
-
- GrafPtr savePort;
- PenState pnState;
- RGBColor foreColor, backColor;
- // Centered within window {faster than calling _InsetRect}:
- Rect meterRect = {22, 15, 22+16, 15+250};
- short grad, pnSize = 1;
-
-
- GetPort(&savePort);
- SetPort(meterWindow);
-
- EraseRect(&meterWindow->portRect);
-
- GetPenState(&pnState);
- if (gMac2) {
- GetForeColor(&foreColor);
- GetBackColor(&backColor);
- PmForeColor(redColor);
- PmBackColor(yellowColor);
- }
-
- PenNormal();
- TextFont(systemFont);
- TextSize(12);
- PenSize(pnSize, pnSize);
-
- EraseRect(&meterRect);
- InsetRect(&meterRect, -pnSize, -pnSize);
- FrameRect(&meterRect);
- InsetRect(&meterRect, pnSize, pnSize);
-
- // Draw the first 5% graduation mark:
-
- MoveTo(meterRect.left + fiveStep, meterRect.top);
- Line(0, fiveSize);
- MoveTo(meterRect.left + fiveStep, meterRect.bottom);
- Line(0, -fiveSize);
-
- // Draw the remaining graduation Marks:
-
- for (grad = 1; grad <= 9; grad++) {
- MoveTo(meterRect.left + grad*tenStep - pnSize, meterRect.top);
- Line(0, tenSize);
- MoveTo(meterRect.left + grad*tenStep - pnSize, meterRect.bottom);
- Line(0, -tenSize);
-
- MoveTo(meterRect.left + grad*tenStep + fiveStep, meterRect.top);
- Line(0, fiveSize);
- MoveTo(meterRect.left + grad*tenStep + fiveStep, meterRect.bottom);
- Line(0, -fiveSize);
- }
-
- // Draw the "horizontal axis" of the dynamic rect:
-
- MoveTo(meterRect.left - 5, meterRect.bottom + 16);
- DrawString("\p0%");
- MoveTo(meterRect.left + 65, meterRect.bottom + 16);
- DrawString("\pPercent Complete");
- MoveTo(meterRect.right - 20, meterRect.bottom + 16);
- DrawString("\p100%");
-
- // Draw the window's "title":
-
- MoveTo(meterRect.left, meterRect.top - 5);
- DrawString(mTitle);
-
- if (gMac2) {
- RGBForeColor(&foreColor);
- RGBBackColor(&backColor);
- }
- SetPenState(&pnState);
- SetPort(savePort);
-
- } /* MeterWindowDraw */
-
-
- void MeterWindowUpdate (WindowPtr meterWindow, Str255 mTitle,
- short currStep, short maxSteps) {
-
-
- MeterWindowDraw(meterWindow, mTitle);
- MeterUpdate(meterWindow, currStep, maxSteps);
-
- } /* MeterWindowUpdate */
-
-
- void MeterUpdate (WindowPtr meterWindow, short currStep, short maxSteps) {
-
- GrafPtr savePort;
- Rect meterRect = {22, 15, 22+16, 15+250};
- RGBColor foreColor;
- short pDone;
-
-
- GetPort(&savePort); // Could be in back, you all !!!
- if (gMac2) {
- GetForeColor(&foreColor);
- PmForeColor(greenColor);
- }
- SetPort(meterWindow);
-
- if (maxSteps == 0) pDone = 0;
- else {
- /* A kludgy way to round-up ... BUT it works !!
- ** ... it sure beats using the full ANSI library
- ** which significantly increases the Project size: */
-
- pDone = (currStep * 10000) / maxSteps;
- if (pDone > ( ((currStep*100)/maxSteps) * 100 )) pDone = pDone/100 + 1;
- else pDone = pDone/100;
- if (pDone > 100) pDone = 100;
- }
-
- meterRect.right = meterRect.left + pDone*2.5;
- FillRect(&meterRect, ltGray);
-
- if (gMac2) RGBForeColor(&foreColor);
- SetPort(&savePort);
-
- } /* MeterUpdate */
-
-
- void MeterWindowKill (WindowPtr meterWindow) {
-
-
- DisposeWindow(meterWindow);
-
- } /* MeterWindowKill */
-
-
-
-
- /* { end file "meter.c" } */
-